home *** CD-ROM | disk | FTP | other *** search
/ Over 1,000 Windows 95 Programs / Over 1000 Windows 95 Programs (Microforum) (Disc 1).iso / 0774 / pfw.ms_ / pfw.ms
Text File  |  1997-04-10  |  16KB  |  557 lines

  1. '**************************************************************************
  2. '*                        Elementrix Setup 1
  3. '**************************************************************************
  4.  
  5. ''$DEFINE DEBUG  ''Define for script development/debugging
  6.  
  7. '$INCLUDE 'setupapi.inc'
  8. '$INCLUDE 'msdetect.inc'
  9.  
  10. ''Dialog ID's
  11. CONST WELCOME       = 100
  12. CONST ASKQUIT       = 200
  13. CONST DESTPATH      = 300
  14. CONST EXITFAILURE   = 400
  15. CONST EXITQUIT      = 600
  16. CONST EXITSUCCESS   = 700
  17. CONST EXITRESTART   = 750
  18. CONST OPTIONS       = 800
  19. CONST APPHELP       = 900
  20. CONST BADPATH       = 6400
  21. CONST BILLBOARD1    = 9001
  22. CONST BILLBOARD2    = 9002
  23. CONST BILLBOARD3    = 9003
  24. CONST BILLBOARD4    = 9004
  25.  
  26. CONST TRUE        = -1
  27. CONST FALSE        = 0
  28.  
  29. ''Bitmap ID
  30. CONST LOGO = 1
  31.  
  32. GLOBAL OPTCUR$      ''Option selection from option dialog.
  33. GLOBAL DestDrive$
  34. GLOBAL PRODUCTNAME$
  35. GLOBAL WinDrive$
  36.  
  37. '' temprorary constants
  38. CONST NORMAL_MODE = 0
  39. CONST ADMIN_MODE = 1
  40. CONST NETWORK_MODE = 2
  41.  
  42. CONST COVLIST = 265
  43. CONST FLTLIST = 285
  44.  
  45. CONST MSPNODISK = 17
  46.  
  47. CONST NoOfSTATUS = 7
  48. CONST ALL = 0
  49.  
  50. CONST WS_VISIBLE=&H10000000
  51. CONST WS_BORDER =&H00800000
  52. CONST WS_CLIPCHILDREN =&H02000000
  53. CONST GWL_STYLE =-16
  54. CONST SW_SHOWMAXIMIZED=3
  55.  
  56. GLOBAL CUIDLL$
  57. GLOBAL SOURCE$
  58. GLOBAL DEST$     '' default setup directory
  59. GLOBAL DLGRET$
  60.  
  61. CONST  MaxDrive  = 2
  62. CONST WindowsDrive  = 0
  63.  
  64. GLOBAL CHECKSTATES$
  65. GLOBAL STATUSTEXT$
  66. GLOBAL DRIVETEXT$
  67. GLOBAL HELPPROC$
  68.  
  69. GLOBAL SETUP_MODE%
  70. GLOBAL FINCUST%
  71. GLOBAL RB%
  72.  
  73. '' end of temproraty constants
  74.  
  75. DECLARE SUB Install
  76. DECLARE SUB QuitProc
  77. DECLARE FUNCTION CheckSpace () AS INTEGER
  78. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  79.  
  80.  
  81. '' Function declarations
  82. DECLARE FUNCTION WinVersion(MajorVer%, MinorVer%) AS INTEGER
  83. DECLARE FUNCTION ShowWindow LIB "user.exe" (hWnd%,iShow%) AS INTEGER
  84. DECLARE FUNCTION SetWindowLong LIB "user.exe" (hWnd%, offset%, style&) AS LONG
  85. DECLARE FUNCTION EXRefreshExpirationData LIB "mscuistf.dll" (Dest$,Source$) AS INTEGER
  86. DECLARE FUNCTION EXVSetExpirationData LIB "mscuistf.dll" (Dest$, pid%, expdays%, bombdays%) AS INTEGER
  87. DECLARE FUNCTION Ctl3dRegister LIB "ctl3d.dll" (hinstance%) AS INTEGER
  88. DECLARE FUNCTION Ctl3dUnregister LIB "ctl3d.dll" (hinstance%) AS INTEGER
  89. DECLARE FUNCTION Ctl3dAutoSubclass LIB "ctl3d.dll" (hinstance%) AS INTEGER
  90.  
  91. '' 1- function dec
  92. DECLARE SUB CallDlg(DlgIDNo%, DlgProc$, HelpIDNo%)
  93.  
  94. '' 2-funciton dec
  95. DECLARE FUNCTION GETPATH(DefaultPath$, DlgTextID%) AS STRING
  96.  
  97.  
  98.  
  99.  
  100. INIT:
  101.  
  102.     PRODUCTNAME$ = "Personal FireWall 2.0 Beta"
  103.     CUIDLL$ = "mscuistf.dll"            ''Custom user interface dll
  104. ''  HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  105.  
  106.     i% = Ctl3dRegister (HinstFrame ())
  107.     i% = Ctl3dAutoSubclass (HinstFrame ())
  108.     hWnd% = HwndFrame()
  109.     k& = SetWindowLong(hWnd%,GWL_STYLE,WS_VISIBLE + WS_BORDER + WS_CLIPCHILDREN)
  110.     i% = ShowWindow(hWnd%,SW_SHOWMAXIMIZED)
  111.  
  112.  
  113.     SetBitmap CUIDLL$, LOGO
  114. ''    i% = DoMsgBox(" till now", "DEBUG", MB_OK) ''************************
  115.     SetTitle PRODUCTNAME$ + " Setup"
  116.  
  117.  
  118.     i% = SetDecompMode(1)
  119.  
  120.  
  121. '' Check the windows version
  122.     IF WinVersion(3,10) THEN
  123.     ELSE
  124.       ERR = VERERR
  125.       GOTO VERERRQUIT
  126.     END IF
  127.  
  128. '' Check the network presens , set the appropriate mode
  129.     IF GetSymbolValue("STF_MODE") = "ADMIN" THEN
  130.         SETUP_MODE = ADMIN_MODE
  131.     ELSEIF GetSymbolValue("STF_MODE") = "NETWORK" THEN
  132.         SETUP_MODE = NETWORK_MODE
  133.     ELSE
  134.         SETUP_MODE = NORMAL_MODE
  135.     END IF
  136.  
  137. '' Get the INF file path
  138.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  139.     IF szInf$ = "" THEN
  140.         szInf$ = MakePath(GetSymbolValue("STF_CWDDIR"),"pfw.INF")
  141.     END IF
  142.     ReadInfFile szInf$
  143.     szInf$ = ""
  144.  
  145. ''    OPTCUR$ = "1"
  146.  
  147.  
  148. '' set source and destination drives and path
  149.     WinDrive$ = MID$(GetWindowsDir, 1, 1)
  150.     IF IsDriveValid(WinDrive$) = 0 THEN
  151.         i% = DoMsgBox("Windows drive ('"+WinDrive$+"') is not a valid drive.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  152.         GOTO QUIT
  153.     END IF
  154.  
  155.     SOURCE$  = GetSymbolValue("STF_SRCDIR")
  156.  
  157.     IF SETUP_MODE = NETWORK_MODE THEN
  158.         SourceDll$ = MakePath(SOURCE$,"DLL")
  159.         DEST$ = SOURCE$
  160.     ELSE
  161.         SourceDll$ = SOURCE$
  162.         DEST$ = WinDrive$ + ":\ELMNTRIX\FIREWALL"
  163.     END IF
  164.  
  165.  
  166.  
  167. WELCOME:
  168.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
  169.     IF sz$ = "CONTINUE" THEN
  170.         UIPop 1
  171.     ELSE
  172. '$IFDEF DEBUG
  173.     i% = DoMsgBox(" wrong welcome ", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  174. '$ENDIF ''DEBUG
  175.  
  176.         GOSUB ASKQUIT
  177.         GOTO WELCOME
  178.     END IF
  179. '$IFDEF DEBUG
  180.     i% = DoMsgBox("After welcome ", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  181. '$ENDIF ''DEBUG
  182.  
  183.  
  184.     DEST$ = GETPATH(DEST$, DESTPATH)
  185.  
  186. '$IFDEF DEBUG
  187.     i% = DoMsgBox("The Path is  ('"+DEST$+"') ", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  188. '$ENDIF ''DEBUG
  189.  
  190.  
  191.     IF CheckSpace() = FALSE THEN
  192.          DEST$ = GETPATH(DEST$, DESTPATH)
  193.     END IF
  194. '$IFDEF DEBUG
  195.     i% = DoMsgBox("Afeter check space ", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  196. '$ENDIF ''DEBUG
  197.  
  198.     Install
  199.  
  200.  
  201. ' ******************************************************************************
  202. QUIT:
  203.     '$IFDEF DEBUG
  204.       sss$=str$(err)
  205.       i% = DoMsgBox(sss$, "error number", MB_TASKMODAL+MB_OK)
  206.     '$ENDIF ''DEBUG
  207.  
  208.     '$IFDEF DEBUG
  209.         i% = DoMsgBox("QUIT: label", "DEBUG", MB_TASKMODAL+MB_OK)
  210.     '$ENDIF ''DEBUG
  211.  
  212.     ON ERROR GOTO ERRQUIT
  213.  
  214.     IF ERR = 0 THEN
  215.         IF RestartListEmpty() = 0 THEN
  216.             dlg% = EXITRESTART
  217.             '$IFDEF DEBUG
  218.                 i% = DoMsgBox("dlg% = EXITRESTART", "DEBUG", MB_TASKMODAL+MB_OK)
  219.             '$ENDIF ''DEBUG
  220.         ELSE
  221.             dlg% = EXITSUCCESS
  222.             '$IFDEF DEBUG
  223.                 i% = DoMsgBox("dlg% = EXITSUCCESS", "DEBUG", MB_TASKMODAL+MB_OK)
  224.             '$ENDIF ''DEBUG
  225.         END IF
  226.     ELSEIF ERR = STFQUIT THEN
  227.         dlg% = EXITQUIT
  228.         '$IFDEF DEBUG
  229.             i% = DoMsgBox("dlg% = EXITQUIT", "DEBUG", MB_TASKMODAL+MB_OK)
  230.         '$ENDIF ''DEBUG
  231.  
  232.     ELSE
  233.         dlg% = EXITFAILURE
  234.         '$IFDEF DEBUG
  235.             i% = DoMsgBox("dlg% = EXITFAILURE", "DEBUG", MB_TASKMODAL+MB_OK)
  236.         '$ENDIF ''DEBUG
  237.     END IF
  238.  
  239. QUITL1:
  240.     '$IFDEF DEBUG
  241.         i% = DoMsgBox("QUITL1: label", "DEBUG", MB_TASKMODAL+MB_OK)
  242.     '$ENDIF ''DEBUG
  243.  
  244.     UIPopAll
  245.  
  246.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  247.     IF sz$ = "REACTIVATE" THEN
  248.         GOTO QUITL1
  249.     END IF
  250.     UIPop 1
  251.  
  252.     IF dlg% = EXITRESTART THEN
  253.         j% = ExitExecRestart()
  254.     END IF
  255.  
  256.     '$IFDEF DEBUG
  257.         i% = DoMsgBox("After QUITL1: before END", "DEBUG", MB_TASKMODAL+MB_OK)
  258.     '$ENDIF ''DEBUG
  259.  
  260.     i% = Ctl3dUnregister (HinstFrame ()) '' Bob for 3d-look
  261.  
  262.     END
  263.  
  264. ERRQUIT:
  265.     '$IFDEF DEBUG
  266.         i% = DoMsgBox("ERRQUIT: label", "DEBUG", MB_TASKMODAL+MB_OK)
  267.     '$ENDIF ''DEBUG
  268.  
  269.     i% = DoMsgBox("Setup sources were corrupted, call ZDBOp!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  270.  
  271.     '$IFDEF DEBUG
  272.         i% = DoMsgBox("After ERRQUIT: before END", "DEBUG", MB_TASKMODAL+MB_OK)
  273.     '$ENDIF ''DEBUG
  274.  
  275.     i% = Ctl3dUnregister (HinstFrame ()) '' Bob for 3d-look
  276.     END
  277.  
  278. VERERRQUIT:
  279.     '$IFDEF DEBUG
  280.         i% = DoMsgBox("ERRQUIT: label", "DEBUG", MB_TASKMODAL+MB_OK)
  281.     '$ENDIF ''DEBUG
  282.  
  283.     i% = DoMsgBox("This version of FireWall works only with WINDOWS 3.1X", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  284.  
  285.     '$IFDEF DEBUG
  286.         i% = DoMsgBox("After ERRQUIT: before END", "DEBUG", MB_TASKMODAL+MB_OK)
  287.     '$ENDIF ''DEBUG
  288.     i% = Ctl3dUnregister (HinstFrame ()) '' Bob for 3d-look
  289.     END
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296. BADPATH:
  297.     '$IFDEF DEBUG
  298.         i% = DoMsgBox("BADPATH: label", "DEBUG", MB_TASKMODAL+MB_OK)
  299.     '$ENDIF ''DEBUG
  300.  
  301.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  302.     IF sz$ = "REACTIVATE" THEN
  303.         GOTO BADPATH
  304.     END IF
  305.     UIPop 1
  306.     RETURN
  307.  
  308.  
  309.  
  310. ASKQUIT:
  311.     '$IFDEF DEBUG
  312.         i% = DoMsgBox("ASKQUIT: label", "DEBUG", MB_TASKMODAL+MB_OK)
  313.     '$ENDIF ''DEBUG
  314.  
  315.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  316.  
  317.     IF sz$ = "EXIT" THEN
  318.         UIPopAll
  319.         '$IFDEF DEBUG
  320.             i% = DoMsgBox("ASKQUIT: before ERROR STFQUIT", "DEBUG", MB_TASKMODAL+MB_OK)
  321.         '$ENDIF ''DEBUG
  322.         ERROR STFQUIT
  323.  
  324.     ELSEIF sz$ = "REACTIVATE" THEN
  325.         GOTO ASKQUIT
  326.     ELSE
  327.         UIPop 1
  328.     END IF
  329.     RETURN
  330.  
  331.  
  332.  
  333. '**
  334. '** Purpose:
  335. '**     Builds the copy list and performs all installation operations.
  336. '** Arguments:
  337. '**     none.
  338. '** Returns:
  339. '**     none.
  340. '*************************************************************************
  341. STATIC FUNCTION CheckSpace() AS INTEGER
  342.  
  343.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  344.  
  345.     ClearCopyList
  346.  
  347.     AddSectionFilesToCopyList "Files", SrcDir$, DEST$
  348.     AddSectionFilesToCopyList "EXVer", SrcDir$, GetWindowsDir()
  349.  
  350.     FOR i% = 1 TO 26 STEP 1
  351.         AddListItem "EXTRA", "0"
  352.     NEXT i%
  353.  
  354. '$IFDEF DEBUG
  355.     i% = DoMsgBox("In the Check Space ", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  356.     i% = DoMsgBox("win drive% = ('"+WinDrive$+"') ", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  357.     i% = DoMsgBox("dest drive% = ('"+DestDrive$+"') ", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  358. '$ENDIF ''DEBUG
  359.  
  360.     wd% = ASC(ucase$(WinDrive$)) - ASC("A") + 1
  361.     dd% = ASC(ucase$(DestDrive$)) - ASC("A") + 1
  362.  
  363.  
  364.     ReplaceListItem "EXTRA", wd%, "10240"
  365.  
  366.     spaceNeeded& = GetCopyListCost("EXTRA","COST","NEEDED")
  367. '$IFDEF DEBUG
  368.     i% = DoMsgBox("The Space Needed is  ('"+STR$(spaceNeeded&)+"') ", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  369. '$ENDIF ''DEBUG
  370.  
  371.  
  372.     IF spaceNeeded& = 0 THEN
  373.     CheckSpace = TRUE
  374.     ELSE
  375.     CheckSpace = FALSE
  376.     w& = VAL(GetListItem("NEEDED",wd%))
  377.     d& = VAL(GetListItem("NEEDED",dd%))
  378.         m$ = "There is not enough disk space to install Personal FireWall"
  379.     IF d& > 0 THEN
  380.         m$ = m$ + CHR$(10) + CHR$(10)
  381.         m$ = m$ + "You need an additional " + STR$((d&+999)/1000) + " kilobytes on drive " + DestDrive$ + "."
  382.             m$ = m$ + " Choose another installation drive, or free additional space on drive " + DestDrive$ + "."
  383.         END IF
  384.     IF (w& > 0) AND (wd% <> dd%) THEN
  385.         m$ = m$ + CHR$(10) + CHR$(10)
  386.         m$ = m$ + "You must free an additional " + STR$((w&+999)/1000) + " kilobytes on drive " + WinDrive$
  387.             m$ = m$ + " before installing Personal FireWall."
  388.     END IF
  389.     i% = DoMsgBox(m$,"Insufficient Disk Space",MB_TASKMODAL+MB_OK+MB_ICONHAND)
  390.     END IF
  391.  
  392.  
  393. END FUNCTION
  394.  
  395. STATIC SUB Install
  396.  
  397.     '$IFDEF DEBUG
  398.         i% = DoMsgBox("Starting Install - CUIDLL ('"+CUIDLL$+"') ", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  399.     '$ENDIF ''DEBUG
  400.  
  401.     CreateDir DEST$, cmoNone
  402.     SetRestartDir DEST$
  403.  
  404.     ''AddToBillboardList CUIDLL$, BILLBOARD1, "FModeless0DlgProc", 1
  405.     ''AddToBillboardList CUIDLL$, BILLBOARD2, "FModeless0DlgProc", 1
  406.     ''AddToBillboardList CUIDLL$, BILLBOARD3, "FModeless0DlgProc", 1
  407.     SetCopyGaugePosition 140, 160
  408.  
  409.     CopyFilesInCopyList
  410.  
  411.     ''---------------------------------------------------------------------------------------
  412.     '' Bob: this func from mscuistf.dll copies all tion data from diskette to hard
  413.     ''
  414.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  415.     ' i% = EXRefreshExpirationData (MakePath(GetWindowsDir(),"exver.cfg"), MakePath(SrcDir$,"exver.cfg"))
  416.  
  417.     i% = EXVSetExpirationData (MakePath(GetWindowsDir(),"exver.cfg"), 8, 30, 45)
  418.  
  419.     CreateProgmanGroup "Personal FireWall 2.0 beta", MakePath(GetWindowsDir(), "pfw.grp"), cmoNone
  420.  
  421.     '$IFDEF DEBUG
  422.         i% = DoMsgBox("GroupCreated ('"+MakePath(GetWindowsDir(), "pfw.grp"), "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  423.     '$ENDIF ''DEBUG
  424.  
  425.     ShowProgmanGroup  "Personal FireWall 2.0 beta", 1, cmoNone
  426.     CreateProgmanItem "Personal FireWall 2.0 beta","RuleBase Manager",  MakePath(DEST$,"fwmanage.exe"), "", cmoOverwrite
  427.     CreateProgmanItem "Personal FireWall 2.0 beta","FireWall Config", MakePath(DEST$,"fwconfig.exe"), "", cmoOverwrite
  428. ''    CreateProgmanItem "Personal FireWall 2.0 beta","FireWall Unlodad/Reload",  MakePath(DEST$,"fwsetup.exe"), "", cmoOverwrite
  429.     CreateProgmanItem "Personal FireWall 2.0 beta","Log Viewer",  MakePath(DEST$,"fwviewer.exe"), "", cmoOverwrite
  430.     CreateProgmanItem "Personal FireWall 2.0 beta","Personal FireWall",  MakePath(DEST$,"fwfilter.exe"), "", cmoOverwrite
  431.  
  432. END SUB
  433.  
  434.  
  435.  
  436. '**
  437. '** Purpose:
  438. '**     Appends a file name to the end of a directory path,
  439. '**     inserting a backslash character as needed.
  440. '** Arguments:
  441. '**     szDir$  - full directory path (with optional ending "\")
  442. '**     szFile$ - filename to append to directory
  443. '** Returns:
  444. '**     Resulting fully qualified path name.
  445. '*************************************************************************
  446. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  447.     IF szDir$ = "" THEN
  448.         MakePath = szFile$
  449.     ELSEIF szFile$ = "" THEN
  450.     IF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  451.         MakePath = MID$(szDir$, 1, LEN(szDir$)-1)
  452.     ELSE
  453.         MakePath = szDir$
  454.     END IF
  455.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  456.         MakePath = szDir$ + szFile$
  457.     ELSE
  458.         MakePath = szDir$ + "\" + szFile$
  459.     END IF
  460. END FUNCTION
  461.  
  462. '' ---------------------------------------------------------------------------------------
  463. FUNCTION WinVersion(MajorVer%, MinorVer%) STATIC AS INTEGER
  464. VerMaj% = GetWindowsMajorVersion()
  465. VerMin% = GetWindowsMinorVersion()
  466.  
  467.  '$IFDEF DEBUG
  468.     sss$="windows version: "+str$(VerMaj%)+"."+str$(VerMin%)
  469.     i% = DoMsgBox(sss$, "DEBUG - windows version", MB_TASKMODAL+MB_OK)
  470.  '$ENDIF ''DEBUG
  471.  
  472.  IF (VerMaj% > MajorVer%) OR ((VerMaj% = MajorVer%) AND (VerMin% >= MinorVer%)) THEN
  473.    WinVersion = TRUE
  474.  ELSE
  475.    WinVersion = FALSE
  476.  END IF
  477. END FUNCTION
  478.  
  479. '' -----------------------------------------------------------------------------------
  480. SUB CallDlg(DlgIDNo%, DlgProc$, HelpIDNo%) STATIC
  481.  SetSymbolValue "DlgID", STR$(DlgIDNo%)
  482.  DLGRET$ = UIStartDlg(CUIDLL$, DlgIDNo%, DlgProc$, HelpIDNo%, HELPPROC$)
  483.  RemoveSymbol "DlgID"
  484. END SUB
  485.  
  486.  
  487. STATIC FUNCTION GETPATH(DefaultPath$, DlgTextID%) AS STRING
  488.  SetSymbolValue "EditTextIn", DefaultPath$
  489.  SetSymbolValue "EditFocus", "END"
  490.  NewPath$ = DefaultPath$
  491.  
  492.  WHILE 1
  493.   SetSymbolValue "FInCust", STR$(FINCUST%)
  494.   CallDlg DESTPATH, "FEditDlgProc", HELPPATH
  495.   RemoveSymbol "FInCust"
  496.  
  497.   SELECT CASE DLGRET$
  498.   CASE "CONTINUE"
  499.         NewPath$ = GetSymbolValue("EditTextOut")
  500.         DestDrive$ = MID$(NewPath$, 1, 1)
  501.  
  502.         IF IsDirWritable(NewPath$) = 0 THEN
  503.            WHILE 1
  504.               CallDlg BADPATH, "FInfo0DlgProc", APPHELP
  505.               IF DLGRET$ <> "REACTIVATE" THEN
  506.                   EXIT WHILE
  507.               END IF
  508.            WEND
  509.            UIPop 1
  510.         ELSE
  511. GOTPATH:
  512.            UIPop 1
  513.            GETPATH = NewPath$
  514.            EXIT WHILE
  515.         END IF
  516.  
  517.     CASE "REACTIVATE"
  518.     CASE ELSE
  519.         IF FINCUST% = 1 THEN
  520.             UIPop 1
  521.             GETPATH = DefaultPath$
  522.             EXIT WHILE
  523.         END IF
  524.  
  525.          QuitProc
  526.    END SELECT
  527.  WEND
  528.  
  529.  RemoveSymbol "EditTextIn"
  530.  RemoveSymbol "EditFocus"
  531.  DefaultPath$ = ""
  532.  NewPath$ = ""
  533.  
  534. END FUNCTION
  535.  
  536. SUB QuitProc STATIC
  537.  '$IFDEF DEBUG
  538.      i% = DoMsgBox("in QuitProc", "DEBUG", MB_TASKMODAL+MB_OK)
  539.  '$ENDIF ''DEBUG
  540.  
  541.  WHILE 1
  542.   CallDlg ASKQUIT, "FQuitDlgProc", APPHELP
  543.  
  544.   IF DLGRET$ = "EXIT" THEN
  545.    UIPopAll
  546.    '$IFDEF DEBUG
  547.        i% = DoMsgBox("QuitProc: ERROR STFQUIT", "DEBUG", MB_TASKMODAL+MB_OK)
  548.    '$ENDIF ''DEBUG
  549.  
  550.    ERROR STFQUIT
  551.   ELSE
  552.    UIPop 1
  553.    EXIT WHILE
  554.   END IF
  555.  WEND
  556. END SUB
  557.